package com.example.utility.pdf;

import com.itextpdf.kernel.colors.DeviceRgb;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.borders.SolidBorder;
import com.itextpdf.layout.element.AreaBreak;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.properties.AreaBreakType;
import com.itextpdf.layout.properties.HorizontalAlignment;
import com.itextpdf.layout.properties.TextAlignment;
import com.itextpdf.layout.properties.UnitValue;


import java.io.IOException;

/**
 * @author 季舟
 * @Date 2024-10-21 15:14
 */
public class PdfExporter {
    private static final String fileImg = "D:/code/maven-parent/logo.png";
    public PdfFont getSongTiFont() throws IOException {
        return PdfFontFactory.createFont("STSong-Light","UniGB-UCS2-H", PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED);
    }

    public static PdfFont getHeiTiFont() throws IOException {
        return PdfFontFactory.createFont("STSong-Light","UniGB-UCS2-H", PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED);
    }

    public static void main(String[] args) throws IOException {
        // 创建一个pdf文档对象
        PdfWriter writer = new PdfWriter("output.pdf");
        PdfDocument pdf = new PdfDocument(writer);
        Document document = new Document(pdf, PageSize.A4);

        pdf.addEventHandler(PdfDocumentEvent.END_PAGE,
                new DemoHeaderFooterHandler(fileImg, getHeiTiFont()));



        // 添加中文字体，不添加ttf，中文不会显示
        PdfFont chineseFont = PdfFontFactory.createFont("STSong-Light","UniGB-UCS2-H", PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED);

        Paragraph catalog = new Paragraph("目录")
                .setFont(chineseFont)
                .setFontSize(60)
                .setTextAlignment(TextAlignment.CENTER)
                .setMarginBottom(10)
                .setMarginTop(10)
                .setMarginLeft(10)
                .setMarginRight(10)
                .setBorder(new SolidBorder(new DeviceRgb(0, 255, 0), 0.5f))
                .setWidth(UnitValue.createPercentValue(90));
        document.add(catalog);

        document.add(new AreaBreak(AreaBreakType.NEXT_PAGE));

        Paragraph title = new Paragraph("中文标题").setFont(chineseFont).setFontSize(20).setBold().setTextAlignment(TextAlignment.CENTER); // 设置文本居中对齐
        document.add(title);


        Paragraph cn = new Paragraph("acrobat pro dc2022是该系列最新推出的一个版本，也是Adobe官方推出的一款PDF阅读器，集创建、阅读、编辑、转换于一身，用户通过它可以对PDF文档进行批注、查看、保存、编辑、打印等操作，并且内置的pdf转换器，允许用户将纸质文档、电子表单Excel、电子邮件、网站、照片、Flash等各种内容扫描或转换为PDF文档，让你可以非常顺手的处理pdf文件，轻松提高办公效率。该软件出了基本的PDF文件创建功能外，还支持对PDF文件进行加密，用户可以限制打印，编辑和复制PDF中的内容，要求输入密码才可以打开PDF，让自己的文件信息更具安全性。不久如此，软件界面也是直观简洁，没有太多复杂的功能，用户无需太多操作就能轻松使用，完全不用担心不会使用的问题。另外在新版本中，adobe acrobat pro dc还集成了微软Office 中使用一键转换PDF文件的功能，包括 Word、Excel、Access、PowerPoint、Publisher 和 Outlook。")
                .setFont(chineseFont).setFontSize(10).setFixedLeading(15f);
        // 向文档中添加内容
        document.add(cn);

        float[] columnWidths = {60, 40}; // percentage
        Table table = new Table(UnitValue.createPercentArray(columnWidths))
                .setWidth(UnitValue.createPercentValue(90))
                .setTextAlignment(TextAlignment.CENTER)
                .setHorizontalAlignment(HorizontalAlignment.CENTER);
        table.addCell(createCell(1, 1, "性别", chineseFont));
        table.addCell(createCell(1, 2, "年龄", chineseFont));
        table.addCell(createCell(2, 1, "很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的名字", chineseFont));
        table.addCell(createCell(2, 2, "年龄", chineseFont));
        for(int i=3;i<100;i++) {
            table.addCell(createCell(i, 1, "张三"+i, chineseFont));
            table.addCell(createCell(i, 2, "18", chineseFont));
        }
        document.add(table);

        // 关闭文档
        document.close();
        System.out.println("PDF created successfully!");
    }

    private static Cell createCell(int row, int column, String text, PdfFont font) {
        //.setKeepTogether(true)为了解决表格跨页分行问题
        Paragraph paragraph = new Paragraph(text).setFont(font).setFontSize(9).setTextAlignment(TextAlignment.CENTER); // 设置文本居中对齐
        return new Cell(row, column)
                .add(paragraph)
                .setBorder(new SolidBorder(new DeviceRgb(0, 0, 0), 0.5f))
                .setKeepTogether(true);
    }


}
